package map
{
	import UI.App;
	import UI.abstract.component.event.UIEvent;
	import UI.abstract.resources.item.MptResource;
	
	import flash.display.Bitmap;
	import flash.display.Sprite;
	
	
	public class MapContainer extends Sprite
	{
		protected var _res : MptResource;
		protected var _url : String;
		public var _bitmap : Bitmap;
		
		public function MapContainer(str:String = null)
		{
			_bitmap = new Bitmap();
			addChild( _bitmap );
			url = str;
		}
		public function set url ( str : String ) : void
		{
			if ( _url == str )
				return;
			
			// 取消上次加载
			if ( ( _res && _url && _url != _res.url ) || ( !_res && _url ) )
				App.loader.canelLoad( _url , onComplete );
			
			//地址为空，图像存在 说明是外部直接设置的bitmapdata，先清理
			if ( !_url && _bitmap.bitmapData )
			{
				_bitmap.bitmapData = null;
				
			}
			
			_url = str;
			
			if ( _url )
			{
				App.loader.load( _url , onComplete );
			}
			else
			{
				if ( _res )
				{
					App.loader.subtractUseNumber( _res );
					_res = null;
					_bitmap.bitmapData = null;
					
				}
			}
		}
		public function get url () : String
		{
			return _url;
		}
		/**
		 * 资源加载完成
		 */
		public function onComplete ( res : MptResource ) : void
		{
			if ( _url == res.url )
			{
				this.mptResource = res;
				dispatchEvent( new UIEvent( UIEvent.LOADER_COMPLETE ) );
			}
		}
		protected function get mptResource () : MptResource
		{
			return _res;
		}
		/**
		 * 设置资源
		 */
		protected function set mptResource ( res : MptResource ) : void
		{
			// 清理现有资源和外部穿的bitmapdata
			if ( res == null )
			{
				// 加载中
				if ( _url )
				{
					if ( ( _res && _url != _res.url ) || ( !_res && _url ) )
						App.loader.canelLoad( _url , onComplete );
					if ( _res )
						App.loader.subtractUseNumber( _res );
				}
				_url = null;
				_res = null;
				_bitmap.bitmapData = null;
				return;
			}
			
			//更新 新资源
			var oldRes : MptResource = _res;
			_res = res;
			_url = _res.url;
			
			if ( oldRes )
				App.loader.subtractUseNumber( oldRes );
			App.loader.addUseNumber( _res );
			
			
		}

		public function dispose():void{
			
			mptResource = null;
			_bitmap = null;
		}
	}
}